package com.wxit.gulimall.search.thread;

import java.util.concurrent.*;

/**
 * @author wj
 * @date 2022.03.07 17:11
 */
public class ThreadTest {

    public static void main(String[] args) {
        ExecutorService service = Executors.newFixedThreadPool(10);
        /**
         * 线程池七大参数
         *  int corePoolSize,
         *                               int maximumPoolSize,
         *                               long keepAliveTime,
         *                               TimeUnit unit,
         *                               BlockingQueue<Runnable> workQueue,
         *                               ThreadFactory threadFactory,
         *                               RejectedExecutionHandler handler
         *
         *   corePoolSize： 核心线程数，一直存在，线程池创建好就准备就绪
         *   maximumPoolSize： 最大线程数量，控制资源
         *   keepAliveTime： 存活时间，如果当前线程数大于core数量，释放空闲线程
         *   unit 时间单位
         *   workQueue  阻塞队列，如果任务有很多，就会将目前多的任务放在队列里面，只要有线程空闲，就会去队列里取出新任务继续执行
         *   threadFactory  线程的创建工厂
         *   handler  如果队列满了，就按照我们指定的拒绝策略拒绝执行任务
         *
         *   工作顺序
         *   1.线程池创建，准备好core数量的核心线程，准备接收任务
         *    1.1 core满了，就将在进来的任务放到阻塞队列中，空闲的core就会自己去阻塞队列中获取任务执行
         *    1.2阻塞队列满了，就直接开新线程执行，最大只能开到指定max的数量
         *    1.3max满了就用RejectedExecutionHandler拒绝任务
         *    1.4max都执行完成，有很多空闲，在指定的时间keepAliveTime以后，释放max-core这些线程
         */
        ThreadPoolExecutor executor = new ThreadPoolExecutor(5,
                200,
                10,
                TimeUnit.SECONDS,
                new LinkedBlockingDeque<>(100000), Executors.defaultThreadFactory(),
                new ThreadPoolExecutor.AbortPolicy());

    }



}
